// 导入服务类
const {
    Service
} = require('egg');

// 创建自定义服务类
class Cart extends Service {
    // 向数据库中添加商品
    async add(cart) {
        try {
            const {
                ctx
            } = this;
            // 将商品添加到表中
            const result = await ctx.app.model.Cart.create(cart)
            if (result) {
                return true;
            }
        } catch (e) {
            console.log(e)
            return false
        }
    }
    // 根据商品的iid和所属用户id查询该商品是否以前已经被添加进购物车中过
    async checkCart(iid, cartId) {
        try {
            // 如果有则返回商品数据，没有则返回null
            const result = await this.app.model.Cart.findOne({
                where: {
                    iid,
                    cartId,
                    checked:false //一定要是在购物车中的
                }
            })
            if (result) {
                return true
            } else {
                return false
            }
        } catch (e) {
            console.log(e)
            throw new Error(e)

        }
    }
    // 修改商品总数
    async updateCount(iid, cartId, count) {
        try {
            let res;
            if (count) {
                // 如果传递count总数表示不是加1
                res = await this.app.model.Cart.update({
                    count
                }, {
                    where: {
                        iid,
                        cartId
                    }
                })
            } else {
                res = await this.app.model.Cart.update({
                    count: this.app.Sequelize.literal('`count`+1')
                }, {
                    where: {
                        iid,
                        cartId
                    }
                })
            }
            if (+res) {
                return true
            } else {
                return false
            }
        } catch (e) {
            console.log(e)
        }
    }
    // 根据用户id和商品状态查询其购物车中的商品（购物车中的商品状态为false）
    async getCart(cartId,checked){
        console.log(typeof checked);
        // checked = +checked
        try{
            let res = await this.app.model.Cart.findAll({
               where:{
                   cartId,
                   checked
               }
            })
            return res;
        }catch(e){
            console.log(e)
            throw new Error(e)
        }
    }

    // 将当前用户购物车中商品状态改为已下单
    async changeState(cartId,orderList){
        try{
            if(orderList.length > 0){
                
            let success = orderList.map(async item => {
                    return await this.app.model.Cart.update({checked:true,count:item.count},{
                        where:{
                            iid:item.iid,
                            cartId
                        }
                    })
                })
                // 判断修改是否全部成功
                if(success.length === orderList.length){
                    return true
                }else{
                    return false
                }
            }else{
                return false
            }
        }catch(e){
            console.log(e)
            throw new Error(e)
        }
    }

    // 删除商品 将用户id和要删除的商品列表作为查询条件
    async deleteGoods(id,cartList){
        const {ctx} = this;
        try{
            // 删除商品
            const res = cartList.map(async item => {
                await ctx.app.model.Cart.destroy({
                    where:{
                        cartId:id,
                        // 商品唯一id
                        iid:item.iid,
                        // 购物车中的商品
                        checked:false
                    }
                })
            })
            // 判断删除是否成功
            if(res.length === cartList.length){
                // 删除成功
                return true;
            }else{
                // 删除失败
                return false;
            }
        }catch(e){
            console.log('deleteGoods',e);
            throw new Error(e);
        }
    }
}

// 导出自定义服务类
module.exports = Cart;